package jp.team.nature.reizoukoapp;

import java.util.ArrayList;
import java.util.Locale;

import jp.team.nature.reizoukoapp.db.SQLOpenHelper;
import android.R.layout;
import android.annotation.SuppressLint;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class RecipeFindActivity extends ListActivity implements OnClickListener {

	// FORMAT: 分類：名前：量：賞味期限
	private static final String FORMAT = "%s";
	private static final String BASE_URL = "http://cookpad.com/search/";
	private ArrayAdapter<String> adapter;

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recipe);

        // ボタンにリスナ登録
        Button buttonBack =(Button) findViewById(R.id.button_back);
        Button buttonClear = (Button) findViewById(R.id.button_clear);
        Button buttonFind = (Button) findViewById(R.id.button_find);
        Button buttonNyuuryoku = (Button) findViewById(R.id.button_nyuuryoku);
        buttonBack.setOnClickListener(this);
        buttonClear.setOnClickListener(this);
        buttonFind.setOnClickListener(this);
        buttonNyuuryoku.setOnClickListener(this);

        // 初期状態では検索ボタンを無効化
        buttonFind.setEnabled(false);

        ListView lv = getListView();
        lv.setOnItemClickListener(listViewOnItemClickListener);

        showListView();
    }

	@SuppressLint("CutPasteId")
	@Override
	public void onClick(View v) {
		if (v == findViewById(R.id.button_back)) {
			finish();
		}
		if (v == findViewById(R.id.button_nyuuryoku)) {
			Intent intent = new Intent();
			intent.setClassName("jp.team.nature.reizoukoapp", "jp.team.nature.reizoukoapp.NyuuryokuActivity");
			startActivity(intent);
		}
		if (v == findViewById(R.id.button_find)) {
			findRecipe();
		}
		if (v == findViewById(R.id.button_clear)) {
			ListView listView = getListView();
			clearCondition(listView);
			Button b = (Button) findViewById(R.id.button_find);
			b.setEnabled(false);
		}
	}

	@Override
	public void onResume() {
		super.onResume();
		// リスト再描画
		// 入力や検索から戻ってきたときの画面更新
		// チェックボックス外れるかも？
		showListView();
		Button b = (Button) findViewById(R.id.button_find);
		b.setEnabled(false);
	}

	private void showListView() {
        // DB接続
        SQLOpenHelper helper = new SQLOpenHelper(this);
        SQLiteDatabase db = helper.getReadableDatabase();
        // 不要なデータ除去
//        Cursor c = db.query("zaiko_table",
//        		new String[] { "id", "category", "name", "quantity", "buydate", "expdate" },
//                null, null, null, null, null);
        Cursor c = db.query(true, "zaiko_table",
        		new String[] { "name" },
                null, null, null, null, null, null);


        // 表示リスト格納場所
        ArrayList<String> itemList = new ArrayList<String> ();

        boolean isEof = c.moveToFirst();
        while (isEof) {
//        	String category = c.getString(1);
//        	String name = c.getString(2);
        	String name = c.getString(0);
//        	Float quantity = c.getFloat(3);
//        	String expDate = c.getString(5);
//        	String content = String.format(Locale.JAPANESE, FORMAT, category, name, quantity, expDate);
        	String content = String.format(Locale.JAPANESE, FORMAT, name);

            itemList.add(content);
        	isEof = c.moveToNext();
        }
        // dbクローズ
        c.close();
        db.close();

        adapter = new ArrayAdapter<String>(this, layout.simple_list_item_multiple_choice, itemList);
        ListView lv = getListView();
        lv.setAdapter(adapter);
	}

	private OnItemClickListener listViewOnItemClickListener = new OnItemClickListener() {
		 @Override
		 public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
			 // チェックが入ったタイミングでボタンの有効/無効を制御
			 Button buttonFind = (Button) findViewById(R.id.button_find);
			 buttonFind.setEnabled(false);
			 ListView lv = getListView();
			 SparseBooleanArray checkedItemPositions = lv.getCheckedItemPositions();
			 for (int i = 0; i < adapter.getCount(); i++) {
				 if (checkedItemPositions.get(i)) {
					 buttonFind.setEnabled(true);
				 }
			 }
		 }
	};

	private void findRecipe() {
		// チェックされたアイテム名を基に検索用URLを生成
		String url = BASE_URL;
		ListView lv = getListView();
		SparseBooleanArray checkedItemPositions  = lv.getCheckedItemPositions();
		for (int i = 0; i < adapter.getCount(); i++) {
			// チェックされたアイテム名をURLに結合
			if (checkedItemPositions.get(i)) {
				url = url + adapter.getItem(i) + " ";
			}
		}
		// URLのToast出力
		Toast.makeText(this, url, Toast.LENGTH_SHORT).show();
		// ブラウザを開いてURLを開く
		Uri uri = Uri.parse(url);
		Intent intent = new Intent(Intent.ACTION_VIEW, uri);
		startActivity(intent);
	}

	private void clearCondition(ListView listView) {
		for (int i = 0; i < listView.getCount(); i++) {
			listView.setItemChecked(i, false);
		}
	}
}
